﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Collections; //Bruges til at anvende iteratoren på lister

using Controller; //Vores Controller
using Interfaces; //Vores Interface

namespace GUI
{
    public partial class frmLeverandører : Form
    {
        private LagerSystem lagersystem; //Aggregering af lagersystem (controller)

        //Attributter
        private int tilstand;

        //Konstanter
        private const int STARTTILSTAND = 0;
        private const int OPRETTILSTAND = 1;
        private const int REDIGERTILSTAND = 2;
        private const int NORMALTILSTAND = 3;

        //Konstuktør
        public frmLeverandører(LagerSystem lagersystem)
        {
            InitializeComponent();
            starttilstand();
            this.lagersystem = lagersystem;
        }

        //Metoder
        private void frmLeverandører_Load(object sender, EventArgs e)
        {
            opdaterLeverandørliste();
        }

        private void lstLeverandører_SelectedIndexChanged(object sender, EventArgs e)
        {
            int leverandørId;

            //Workarround
            //if (lstLeverandører.FocusedItem != null)
            if (lstLeverandører.SelectedItems.Count > 0)
            {
                //leverandørId = Convert.ToInt32(lstLeverandører.FocusedItem.SubItems[0].Text);
                leverandørId = Convert.ToInt32(lstLeverandører.SelectedItems[0].Text);
            }
            else
            {
                return;
            }

            ILeverandørdata leverandørdata = lagersystem.FindLeverandør(leverandørId);

            txtAdresse.Text = leverandørdata.Adresse;
            txtBy.Text = leverandørdata.By;
            txtEmail.Text = leverandørdata.Email;
            txtKontaktperson.Text = leverandørdata.KontaktPerson;
            txtNavn.Text = leverandørdata.Navn;
            txtPostNr.Text = leverandørdata.Postnr;
            txtTlfNr.Text = leverandørdata.Tlfnr;
            txtWebside.Text = leverandørdata.Www;

            normaltilstand();
        }

        private void btnTilbage_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnNy_Click(object sender, EventArgs e)
        {
            oprettilstand();
            rydTextbokse();
            txtNavn.Focus();
        }

        private void btnRediger_Click(object sender, EventArgs e)
        {
            redigertilstand();
            txtNavn.Focus();
        }

        private void btnFortryd_Click(object sender, EventArgs e)
        {
            starttilstand();
        }

        private void btnGem_Click(object sender, EventArgs e)
        {
            string navn, adresse, webside, email, kontaktperson, postnr, by, tlfnr;

            if (txtNavn.Text == "")
            {
                MessageBox.Show("Der skal indtastes et navn!", "Ups!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtNavn.Focus();
                return;
            }

            navn = txtNavn.Text;
            adresse = txtAdresse.Text;
            webside = txtWebside.Text;
            email = txtEmail.Text;
            kontaktperson = txtKontaktperson.Text;
            postnr = txtPostNr.Text;
            by = txtBy.Text;
            tlfnr = txtTlfNr.Text;

            if (tilstand == OPRETTILSTAND)
            {
                lagersystem.RegistrerLeverandør(navn, adresse, postnr, by, tlfnr, webside, email, kontaktperson);
            }
            else
            {
                lagersystem.RedigerLeverandør(navn, adresse, postnr, by, tlfnr, webside, email, kontaktperson);
            }
            opdaterLeverandørliste();
            normaltilstand();
        }

        //Privatemetoder
        private void opdaterLeverandørliste()
        {
            ILeverandørdata leverandørdata;
            lstLeverandører.Items.Clear();
            IEnumerator leverandøriterator;
            leverandøriterator = lagersystem.GetLeverandøriterator();
            leverandøriterator.Reset();
            while (leverandøriterator.MoveNext())
            {
                ListViewItem linie = new ListViewItem();
                leverandørdata = (ILeverandørdata)leverandøriterator.Current;
                linie.Text = leverandørdata.LeverandørId.ToString();
                linie.SubItems.Add(leverandørdata.Navn);
                lstLeverandører.Items.Add(linie);
            }
        }

        private void rydTextbokse()
        {
            txtNavn.Clear();
            txtAdresse.Clear();
            txtWebside.Clear();
            txtEmail.Clear();
            txtKontaktperson.Clear();
            txtPostNr.Clear();
            txtTlfNr.Clear();
            txtBy.Clear();
        }
        
        //Tilstandsstyrring
        private void starttilstand()
        {
            tilstand = STARTTILSTAND; //Formtilstand
            rydTextbokse();

            //Tilstand for knapper
            btnNy.Enabled = true;
            btnRediger.Enabled = false;
            btnGem.Enabled = false;
            btnFortryd.Enabled = false;
            btnTilbage.Enabled = true;

            //Tilstand for textbokse

            txtNavn.Enabled = false;
            txtAdresse.Enabled = false;
            txtWebside.Enabled = false;
            txtEmail.Enabled = false;
            txtKontaktperson.Enabled = false;
            txtPostNr.Enabled = false;
            txtTlfNr.Enabled = false;
            txtBy.Enabled = false;

            lstLeverandører.Enabled = true;
        }

        private void oprettilstand()
        {
            tilstand = OPRETTILSTAND;
            rydTextbokse();

            //Tilstand for knapper
            btnNy.Enabled = false;
            btnRediger.Enabled = false;
            btnGem.Enabled = true;
            btnFortryd.Enabled = true;
            btnTilbage.Enabled = false;

            //Tilstand for textbokse

            txtNavn.Enabled = true;
            txtAdresse.Enabled = true;
            txtWebside.Enabled = true;
            txtEmail.Enabled = true;
            txtKontaktperson.Enabled = true;
            txtPostNr.Enabled = true;
            txtTlfNr.Enabled = true;
            txtBy.Enabled = true;

            lstLeverandører.Enabled = false;
        }

        private void redigertilstand()
        {
            tilstand = REDIGERTILSTAND;


            //Tilstand for knapper
            btnNy.Enabled = false;
            btnRediger.Enabled = false;
            btnGem.Enabled = true;
            btnFortryd.Enabled = true;
            btnTilbage.Enabled = false;

            //Tilstand for textbokse

            txtNavn.Enabled = true;
            txtAdresse.Enabled = true;
            txtWebside.Enabled = true;
            txtEmail.Enabled = true;
            txtKontaktperson.Enabled = true;
            txtPostNr.Enabled = true;
            txtTlfNr.Enabled = true;
            txtBy.Enabled = true;

            lstLeverandører.Enabled = false;
        }

        private void normaltilstand()
        {
            tilstand = NORMALTILSTAND;

            //Tilstand for knapper
            btnNy.Enabled = true;
            btnRediger.Enabled = true;
            btnGem.Enabled = false;
            btnFortryd.Enabled = false;
            btnTilbage.Enabled = true;

            //Tilstand for textbokse

            txtNavn.Enabled = false;
            //txtNavn.BackColor = Color.White;
            txtAdresse.Enabled = false;
            txtWebside.Enabled = false;
            txtEmail.Enabled = false;
            txtKontaktperson.Enabled = false;
            txtPostNr.Enabled = false;
            txtTlfNr.Enabled = false;
            txtBy.Enabled = false;

            lstLeverandører.Enabled = true;
        }

    }
}
